#pragma once
#include "fxcc/core/audio/openal/pch.h"
#include "fxcc/core/audio/common/Source.h"

namespace fxcc
{
    namespace audio
    {
        namespace openal
        {
            struct FXCC_API Source :public fxcc::audio::common::Source
            {
                Source(const Desc& desc);

                unsigned int m_Source{0};

                unsigned int m_Buffer{0};

                bool m_Available{ 0 };

                bool Init();

                bool InitWav();

                bool InitOgg();

                void Restart() const;

                void Create();

                void BufferData(int format, const short* data, int size, int freq);

                void Play() const override;

                void Pause() const override;

                void Stop() const override;

                void WaitEnd() ;

                int GetState();

                int GetInt(int param);

                void SetInt(int param, int value);

                float GetFloat(int param);

                void SetFloat(int param, float value);

                float GetGain();

                void SetGain(float gain);

                void SetVec3(int param, float x, float y, float z);

                void GetVec3(int param, float& x, float& y, float& z);

                void SetIVec3(int param, int x, int y, int z);

                void GetIVec3(int param, int& x, int& y, int& z);

                void SetLooping(bool v);

                void Delete();

                ~Source();
            };
        }
    }
}
